#ifndef UC_BRHIT_H
#define UC_BRHIT_H 1

#include "zadesk.h"
#include "zrxobject.h"
#include "zrxboiler.h"
#include "ucbrgbl.h"


// forward class declarations
class UcGePoint3d;
class UcBrEntity;
class UcBrHitData;
class UcBrImpHit;


// this is a temporary typedef to guarantee binary compatibility
typedef UcBrHitData UcBrHitPath;


class DllImpExp UcBrHit : public UcRxObject
{
public:
    UCRX_DECLARE_MEMBERS(UcBrHit);
    UcBrHit();
    UcBrHit(const UcBrHit& src);
    ~UcBrHit();

    // Assignment operator
    UcBrHit&            operator =      (const UcBrHit& src);

    // Equivalence                    
    ZSoft::Boolean      isEqualTo       (const UcRxObject* other) const;
    
    // Queries & Initialisers
    ZSoft::Boolean      isNull          () const;
	// (Note: obsolete function)
    UcBr::ErrorStatus   setHitPath	    (UcBrHitPath& hitPath);

    // Geometry (Note: deprecated function)
    UcBr::ErrorStatus   getPoint        (UcGePoint3d*& point) const;

    // Topological Containment
    UcBr::ErrorStatus   getEntityHit    (UcBrEntity*& entityHit) const;
    UcBr::ErrorStatus   getEntityEntered(UcBrEntity*& entityEntered) const;

	// Topology
	UcBr::ErrorStatus   getEntityAssociated(UcBrEntity*& entity) const;

    // Geometry
    UcBr::ErrorStatus   getPoint        (UcGePoint3d& point) const;

	// Validation
	UcBr::ErrorStatus	setValidationLevel(const UcBr::ValidationLevel& validationLevel = *(UcBr::ValidationLevel*)NULL);
	UcBr::ErrorStatus	getValidationLevel(UcBr::ValidationLevel& validationLevel) const;
	ZSoft::Boolean		brepChanged		() const;

    // Queries & Initialisers
    UcBr::ErrorStatus   set				(UcBrHitData* hitData);
    UcBr::ErrorStatus   get				(UcBrHitData*& hitData) const;

protected:
    UcBrImpHit*         mpImp;
};


#endif

